<?php
class Delivery_Model_Mapper_ItemsPromocion
	extends Delivery_Model_Mapper_Abstract
{
	
	public function getDbTable()
	{
		return parent::getDbTable( 'ItemsPromocion' );
	}
	
	public function save( $item )
	{
		$dbTable= $this->getDbTAble();
		$this->idItem = $dbTable->insert( $item );
	}
	
	public function deleteByPromocion( $promocion )
	{
		$dbTable= $this->getDbTAble();
		return $dbTable->deleteByPromocion( $promocion->getId() );
	}
	
	public function getByPromocion( $idPromocion )
	{
		$dbTable= $this->getDbTAble();
		
		return $this->_fetchCollection(
			'ItemsPromocion',
			$dbTable->getByPromocion( $idPromocion )
		);
		
	}
	
	public function loadData( $itemsPromocion, $idNegocio )
	{
		$this->loadProducto( $itemsPromocion );
		$this->loadProductos( $itemsPromocion );
		$this->loadCategoria( $itemsPromocion );
		$this->loadCategoryProductos( $itemsPromocion, $idNegocio);
	}
	
	public function loadCategoryProductos( $itemsPromocion, $idNegocio )
	{
		$mapper = Delivery_Model_Factory::mapper('Productos');
		
		if ( $itemsPromocion instanceof Delivery_Model_Collection_ItemsPromocion){
		
			if( ! count($itemsPromocion) ){
				return;
			}
			
			$idsCategoria = $itemsPromocion->getKeyValues( 'idCategoria', true, true );
			
			if( empty($idsCategoria) ){
				return;
			}
			
			$productos = $mapper->getByParams( array(
				'idNegocio' => $idNegocio,
				'idCategoria' => $idsCategoria,
			) );
			
			foreach ( $itemsPromocion as $itemPromocion ){
				
				if( ! $itemPromocion->isCategoria() ){
					continue;
				}
				
				$productos2 = $productos->getByKey( 'idCategoria', $itemPromocion->idCategoria );
				$mapper->loadCategoria ($productos2);
				
				$itemPromocion->setCategoryProductos(
					$productos2
				);
			}
		}
		
	 	elseif ( $itemsPromocion instanceof Delivery_Model_ItemPromocion ){
			
	 		$productos = $mapper->getByParams( array(
				'idNegocio' => $idNegocio,
				'idCategoria' => $itemsPromocion->idCategoria,
			) );
	 		
			$mapper->loadCategoria ($productos);
			
	 		$itemPromocion->setCategoryProductos( $productos );
		}
	}
	
	public function loadProductos( $itemsPromocion )
	{
		$mapper = Delivery_Model_Factory::mapper('Productos');
		
		if ( $itemsPromocion instanceof Delivery_Model_Collection_ItemsPromocion && count($itemsPromocion) ){
		
			foreach ( $itemsPromocion as $itemPromocion ){
				
				if( ! $itemPromocion->isProductos()){
					continue;
				}
				
				$productos = $mapper->getByIds( $itemPromocion->idsProducto );
				$mapper->loadCategoria( $productos );
				
				$itemPromocion->setProductos(
					$productos
				);
			}
		}
		
	 	elseif ( $itemsPromocion instanceof Delivery_Model_ItemPromocion && $itemPromocion->isProducto() ){
			
	 		$productos = $mapper->getByIds( $itemsPromocion->idsProducto  );
			$mapper->loadCategoria( $productos );
	 		
	 		$itemsPromocion->setProductos(
					$productos
			);
		}
	}
	
	public function loadProducto( $itemsPromocion )
	{
		$mapper = Delivery_Model_Factory::mapper('Productos');
		
		if ( $itemsPromocion instanceof Delivery_Model_Collection_ItemsPromocion && count($itemsPromocion)){
		
			$idsProcuctos = $itemsPromocion->getKeyValues( 'idProducto', true, true );
			
			if( empty($idsProcuctos)){
				return;
			}
			
			$productos = $mapper->getByIds( $idsProcuctos );
			$mapper->loadCategoria( $productos );
			
			foreach ( $itemsPromocion as $itemPromocion ){
				
				if( ! $itemPromocion->isProducto()){
					continue;
				}
				
				$itemPromocion->setProducto(
					$productos->offsetGet( $itemPromocion->idProducto )
				);
				
			}
		}
		
	 	elseif ( $itemsPromocion instanceof Delivery_Model_ItemPromocion && $itemPromocion->isProducto()){

	 		$productos = $mapper->getById( $itemsPromocion->idProducto );
			$mapper->loadCategoria( $productos );
	 		
	 		$itemPromocion->setProducto( 
				$productos
	 		);
		}
	}
	
	public function loadCategoria( $itemsPromocion )
	{
		$mapper = Delivery_Model_Factory::mapper('Categorias');
		
		if ( $itemsPromocion instanceof Delivery_Model_Collection_ItemsPromocion && count($itemsPromocion) ){
		
			$idsCategorias = $itemsPromocion->getKeyValues( 'idCategoria', true, true );
			
			if( empty($idsCategorias)){
				return;
			}
			
			$categorias = $mapper->getByIds( $idsCategorias );
			
			foreach ( $itemsPromocion as $itemPromocion ){
				
				if( ! $itemPromocion->isCategoria() ){
					continue;
				}
				
				$itemPromocion->setCategoria(
					$categorias->offsetGet( $itemPromocion->idCategoria )
				);
			}
		}
		
	 	elseif ( $itemsPromocion instanceof Delivery_Model_ItemPromocion && $itemPromocion->isCategoria()){

	 		$itemPromocion->setCategoria( 
				$mapper->getById( $itemsPromocion->idCategoria )
	 		);
		}
	}
	
	
	
	public function inAnyItem( $idProducto )
	{
		return $this->getDbTAble()->inAnyItem( $idProducto );	
	}
	
	
	/**
	 * @param array
	 * @return object Delivery_Model_ItemPromocion
	 */
	protected function _fetch( $row )
	{
		$item = new Delivery_Model_ItemPromocion( $row );
		
		$this->getIdentityMap()->set( $item, $item->getId() );
		
		return $item;
	}
	
}